UNPKG

train

Version:

Train a fast (FIFO) queue with a rollback mechanism. Behind the scenes it uses 2 arrays to simulate and perform fast shifting and popping operations without using the Array#shift() method..

52 lines (39 loc) 1.05 kB
#!/usr/bin/env node var log = console.log , print = function ( ms, n ) { var avg = 1000 * n / ms; log( '- total elements evicted: %d.', n ); log( '- elapsed: %d secs.', ( ms / 1000 ).toFixed( 4 ) ); log( '- average: %d Mel/sec.', ( avg / 1000 / 1000 ).toFixed( 2 ) ); } , Train = require( '../' ) , t = new Train() , p = 24 , k = Math.pow( 2, p ) , i = 0 , result = [] , stime = 0 , etime = 0 ; log( '- fill Train with 2^%d items', p ); i = k >>> 1; for ( ; i--; ) { t.push( 1 ); }; /* * shift out 2 items to force internal switching of * Train.qhead with Train.qtail,then push the same * number of items to fill qtail, finally set the * current qhead index to the middle queue position. */ t.pop( 2 ); i = k >>> 1; for ( ; i--; ) { t.push( 1 ); }; t.pos = k >>> 2; log( '- evicting %d items with a single #pop() from index %d', k >>> 1, k >>> 2 ); stime = Date.now(); result = t.pop( k >>> 1 ); etime = Date.now() - stime; print( etime, k >>> 1 );